package ui.swing.list;

import javax.swing.AbstractListModel;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListModel;

/**
 * 当程序要show出list时，系统会先自动调用其model的getSize()方法，看看这个list长度有多少;
 * 然后再调用setVisibleRowCount()方法,看要一次输出几笔数据;最后调用getElementAt()方法，
 * 将list中的项目值(item)填入list中。
 */
public class List_AbstractListModel extends JFrame {

	private static final long serialVersionUID = 4869280230226870033L;

	public List_AbstractListModel() {
		super("JList Model 的使用和注意事项");

		ListModel mode = new DataModel();
		JList list = new JList(mode); // 利用ListModel建立一个JList.
		list.setVisibleRowCount(4); // 设置程序一打开时所能看到的数据项个数。
		list.setBorder(BorderFactory.createTitledBorder("你最喜欢到哪个国家玩呢?"));

		getContentPane().add(new JScrollPane(list));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}

	public static void main(String[] args) {
		new List_AbstractListModel();
	}
	
}

/*
 * 当程序要show出list时，系统会先自动调用其model的getSize()方法，看看这个list长度有多少;
 * 然后再调用setVisibleRowCount()方法,看要一次输出几笔数据;最后调用getElementAt()方法，
 * 将list中的项目值(item)填入list界面中。
 */
class DataModel extends AbstractListModel {

	private static final long serialVersionUID = 5631708990308233098L;
	String[] s = { "美国", "越南", "大陆", "英国", "法国", "大陆", "意大利", "澳洲" };

	// 绘制时从0开始，调用getSize()这么多次
	public Object getElementAt(int index) {
		return (index + 1) + "." + s[index];
	}

	public int getSize() {
		return s.length;
	}

}